package exception;

/**
 *     异常处理机制中的try-catch
 *     语法:
 *        try{
 *            代码片段
 *        }catch(XXXException e){
 *            当try代码中出现XXXException后的解决办法
 *        }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始");
        try {
//            String str = null;
//            String str = "";
            String str = "a";
            /*
                当str为null时,虚拟机执行下面的代码,发现出了空指针,于是会实例化一个NullPointerException,
                并将报错的位置设置进去,然后将异常抛出
             */
            System.out.println(str.length());
            System.out.println(str.charAt(0));
            System.out.println(Integer.parseInt(str));
            System.out.println("****************************");
        }catch (NullPointerException e){
            System.out.println("空指针");
            //catch可以定义多个,当针对不同异常有不同处理操作时要分别捕获并处理
        }catch (StringIndexOutOfBoundsException e){
            System.out.println("下标越界");
        /*
            我们可以捕获超类型异常,通常下面情况会这样做:
               1.当try中出现了几类不同的异常,但是解决办法相同时,可以捕获这些类异常
                 的统一超类,进行统一处理.
               2.在最后一个catch处捕获Exception可以尽量避免因为一个未知异常导致程序中断.
         */
        }catch (Exception e){
            System.out.println("未知异常");
        }
        System.out.println("程序结束");
    }
}